/*
 * Departamento de Ciência da Computação
 * Tradutores 02/2009 - turma A
 * Professor Marco Aurélio
 * Alunos: Danilo Gaby Andersen Trindade - 06/82039
 *         Alex Rodrigo de Oliveira      - 06/30403
 */

#ifndef _CODE_H
#define _CODE_H


/**
 * Inicializa as variável do gerador de código.
 */
void cod_init();


/**
 * Finaliza as variáveis internas do gerador.
 */
void cod_end();


/**
 * Cria novo registrador global.
 */
int cod_reg0();


/**
 * Cria local registrador local.
 */
int cod_reg1();


/**
 * Cria um box, cria um registrador global, faz ele apontar para o box e prepara
 * para começar a adicionar instruções nesse box.
 */
int cod_fn();


/**
 * Finaliza o box da função.
 */
int cod_fn_end();


/**
 * Gera instrução MOV.
 */
int cod_move(int16_t rs, int16_t a1, char tp);


/**
 * Gera instrução.
 */
int cod_eq(int16_t a1, int16_t a2);

int cod_lt(int16_t a1, int16_t a2);

int cod_gt(int16_t a1, int16_t a2);

int cod_le(int16_t a1, int16_t a2);

int cod_ge(int16_t a1, int16_t a2);

int cod_ne(int16_t a1, int16_t a2);

int cod_add(int16_t a1, int16_t a2);

int cod_sub(int16_t a1, int16_t a2);

int cod_mult(int16_t a1, int16_t a2);

int cod_mod(int16_t a1, int16_t a2);

int cod_div(int16_t a1, int16_t a2);


/**
 * Gera instrução IM.
 */
int cod_imm(int32_t val);


#endif /* _CODE_H */
